'''
::
    
    ################################# 数据位数 #################################
    
    ################### 数据位数 ###################
    LVDS_18_BIT = 0  # 18 Bit
    LVDS_24_BIT = 1  # 24 Bit
    LVDS_30_BIT = 2  # 30 Bit
    
    ################### pclk锁存边缘 ###################
    LVDS_FALLING_EDGE = 0  # 下降沿锁存数据
    LVDS_RISING_EDGE = 1  # 上升沿锁存数据
    
    ################### 脉冲有效电平 ###################
    LVDS_LOW_ACTIVE = 0  # 低电平有效
    LVDS_HIGH_ACTIVE = 1  # 高电平有效
    
    ################### 显示模式 ###################
    LVDS_1Port_Display = 0  # 1port
    LVDS_2Port_Display = 1  # 2port
    LVDS_3Port_Display = 2  # 3port
    LVDS_4Port_Display = 3  # 4port
    LVDS_2Port_Split_Display = 4  # 2port  左右分屏
    LVDS_3Port_Split_Display = 5  # 3port  三分屏	
    LVDS_4Port_Split_Display = 6  # 4port  左右分屏	
    
    ################### 数据格式 ###################
    LVDS_VESA = 0  # 标准显示
    LVDS_JEIDA = 1  # JEIDA格式
    
    ################### RGB方向 ###################
    LVDS_DIR_RGB = 0  # RGB
    LVDS_DIR_BGR = 1  # BGR
    
    ################### port顺序 ###################
    LVDS_PortDir_Normal  = 0   #port顺序正向
    LVDS_PortDir_Opposite = 1  #port顺序反向
    
    ################### port组合 ###################
    LVDS_PortGroup_Left = 0    #靠左组合port
    LVDS_PortGroup_Right = 1   #靠右组合port
    
'''

class lvds_panel_par(object):
    '''    
        LVDS点屏参数配置类
    '''

    autoPanelFre = 0
    '''    
        刷新率
    '''

    def pclk(self):
        '''    
        屏幕pclk时钟 单位:Mhz,支持小数
        '''

    def h_active(self):
        '''    
        水平同步信号的的有效像素
        '''

    def h_pulse_width(self):
        '''    
        水平同步信号的脉冲宽度
        '''

    def h_front_porch(self):
        '''    
        水平同步信号的前沿
        '''

    def h_back_porch(self):
        '''    
        水平同步信号的后沿
        '''

    def v_active(self):
        '''    
        垂直同步信号的有效像素
        '''

    def v_pulse_width(self):
        '''    
        垂直同步信号的脉冲宽度
        '''

    def v_front_porch(self):
        '''    
        垂直同步信号的前沿
        '''

    def v_back_porch(self):
        '''    
        垂直同步信号的后沿
        '''

    def bit_mode(self):
        '''    
        数据位数
        '''

    def pclk_edge(self):
        '''    
        pclk锁存边缘
        '''

    def h_active_edge(self):
        '''    
        水平同步信号的有效电平
        '''

    def v_active_edge(self):
        '''    
        垂直同步信号的有效电平
        '''

    def de_active_edge(self):
        '''    
        de脉冲有效电平
        '''

    def display_mode(self):
        '''    
        显示模式
        '''

    def dat_format(self):
        '''    
        数据格式
        '''

    def rgb_dir(self):
        '''    
        RGB方向
        '''

    def port_dir(self):
        '''    
        port顺序
        '''

    def port_group(self):
        '''    
        port组合
        '''

    def Pack_Data(self):  # 需要对每个参数赋值 字节流才会有更新
        '''    
        打包数据流
        '''

    def UnPack_Data(self, byte):
        '''    
        解析数据流
        '''

def SHARP_UserLvds_Init():
    '''    
    LVDS信号初始化

    * 参数   : 无

    * 返回   
        * 0:表示硬件ok

    * 注意   : 用户不需要调用

    * raise  :   无
    '''

def SHARP_UserLvds_DeInitPanelPar(hz, class_panel):
    '''         
    给par传个默认值,调用会覆盖par的值

    *参数
        * hz : 屏幕刷新率
        * class_panel : lvds_panel_par 点屏参数配置类

    *返回   : 无

    *注意   : 函数出来后,参数不能直接用,要经过修改

    * raise  :   无 
    '''

def SHARP_UserLvds_SetPanelPar(class_panel):
    '''√
    点屏参数配置初始化函数

    * 参数 
        * class_panel : lvds_panel_par 点屏参数配置类

    * 返回  
        * >=0: 点屏参数配置初始化成功
        * <0: 点屏参数配置初始化失败

    * raise  :   无         
    '''

def SHARP_UserLvds_ConfPanelFre(hz, class_panel):
    '''√
    通过屏参数以刷新率为目标,修改par中的pclk参数,使其达到所要的刷新率.

    * 参数
         * hz           : 需要的达到的刷新率
        * class_panel  : lvds_panel_par 点屏参数配置类

    * 返回  : 无(修改后的结构体以类的形式返回，返回的形式类似C指针形式并不在由return 返回)

    * 注意  : 函数执行后并不是直接生效,只是修改了par中的pclk参数,具体起作用是 UserMipi_SetPanelPar 函数后才生效
    *         所以要在 UserMipi_SetPanelPar 函数之前使用    

    * raise  :   无      
    '''

def SHARP_UserLvds_GetPanelFre(class_panel):
    '''      
    通过屏参数返回现在的刷新率

    *参数 
        * class_panel: lvds_panel_par 点屏参数配置类

    *返回   
        * 屏幕刷新频率

    * raise  :   无  
    '''

def SHARP_UserLvds_PclkGetPanelFre(class_panel, pclk):
    '''   
    通过屏前后沿参数与现传进去的pclk计算返回刷新率

    * 参数
        * class_panel   : lvds_panel_par 点屏参数配置类
        * pclk          : pclk 像素时钟 单位Mhz

    * 返回   : 屏幕刷新频率

    * raise  :   无  
    '''

def SHARP_UserLvds_GetPanelPclk(class_panel, hz):
    '''  
    通过屏前后沿参数与刷新率获取pclk

    * 参数
        * class_panel   : lvds_panel_par 点屏参数配置类
        * hz            ：屏幕刷新频率

    * 返回  
        * 像素时钟 单位Mhz

    * raise  :   无
    '''

def SHARP_UserLvds_ON(index = None):
    '''
    开启Lvds信号

    * 参数
        * index :  使能的板子 不传则默认为全选

    * 返回   : 看 EnumUserReturn 枚举

    * raise  :   无
    '''

def SHARP_UserLvds_OFF(index = None):
    '''
    关闭LvdS信号

    * 参数
    * index:  使能的板子 不传则默认为全选

    * 返回   
        * 看 EnumUserReturn 枚举

    * raise  :   无
    '''

def SHARP_UserLVDS_SetTiming(class_panel):
    '''
    在点亮的同时动态的修改参数

    * 参数 
        * class_panel: lvds_panel_par 点屏参数配置类

    * 返回   
        * 0--NG  
        * 1--ok

    * 注意   : 改pclk需要关闭显示才能修改

    * raise  :   无
    '''

def SHARP_Display_Lvds_Init(PCLK, Pane_str):
    '''
    LVDS屏幕参数设置

    * 参数 
        * PCLK     : 屏幕PCLK
        * Pane_str : lvds_panel_par 点屏参数配置类

    * 返回   : 无

    * raise  :   无

    '''

class LVDS(object):
    '''√
    LVDS信号配置模块类

    * 参数 : 
        * PanelFre:: 屏幕PCLK
        * Pane_str : lvds_panel_par 点屏参数配置类
    * 返回 :  
        *
    * 注意 : 
        使用时需要先实例化方可使用。
    * raise  :   无            
    '''

   #'''
   #::
        
    ALL_En_Flag = 1
    panel_object = None
    LVDS_EN = 0
    ################### 数据位数 ###################
    LVDS_18_BIT = 0  # 18 Bit
    LVDS_24_BIT = 1  # 24 Bit
    LVDS_30_BIT = 2  # 30 Bit

    ################### pclk锁存边缘 ###################
    LVDS_FALLING_EDGE = 0  # 下降沿锁存数据
    LVDS_RISING_EDGE = 1  # 上升沿锁存数据

    ################### 脉冲有效电平 ###################
    LVDS_LOW_ACTIVE = 0  # 低电平有效
    LVDS_HIGH_ACTIVE = 1  # 高电平有效

    ################### 显示模式 ###################
    LVDS_1Port_Display = 0  # 1port
    LVDS_2Port_Display = 1  # 2port
    LVDS_3Port_Display = 2  # 3port
    LVDS_4Port_Display = 3  # 4port
    LVDS_2Port_Split_Display = 4  # 2port  左右分屏
    LVDS_3Port_Split_Display = 5  # 3port  三分屏	
    LVDS_4Port_Split_Display = 6  # 4port  左右分屏	

    ################### 数据格式 ###################
    LVDS_VESA = 0  # 标准显示
    LVDS_JEIDA = 1  # JEIDA格式

    ################### RGB方向 ###################
    LVDS_DIR_RGB = 0  # RGB
    LVDS_DIR_BGR = 1  # BGR

    ################### port顺序 ###################
    LVDS_PortDir_Normal  = 0   #port顺序正向
    LVDS_PortDir_Opposite = 1  #port顺序反向

    ################### port组合 ###################
    LVDS_PortGroup_Left = 0    #靠左组合port
    LVDS_PortGroup_Right = 1   #靠右组合port

   #'''

    def UserLvds_DeInitPanelPar(self,hz, class_panel):
        '''         
        给par传个默认值,调用会覆盖par的值

        *参数
            * hz : 屏幕刷新率
            * class_panel : lvds_panel_par 点屏参数配置类

        *返回   : 无

        *注意   : 函数出来后,参数不能直接用,要经过修改

        * raise  :   无 
        '''

    def UserLvds_SetPanelPar(self,class_panel):
        '''√
        点屏参数配置初始化函数

        * 参数 
            * class_panel : lvds_panel_par 点屏参数配置类

        * 返回  
            * >=0: 点屏参数配置初始化成功
            * <0: 点屏参数配置初始化失败

        * raise  :   无         
        '''

    def UserLvds_ConfPanelFre(self,hz, class_panel):
        '''√
        通过屏参数以刷新率为目标,修改par中的pclk参数,使其达到所要的刷新率.

        * 参数
            * hz           : 需要的达到的刷新率
            * class_panel  : lvds_panel_par 点屏参数配置类

        * 返回  : 无(修改后的结构体以类的形式返回，返回的形式类似C指针形式并不在由return 返回)

        * 注意  : 函数执行后并不是直接生效,只是修改了par中的pclk参数,具体起作用是 UserMipi_SetPanelPar 函数后才生效
        *         所以要在 UserMipi_SetPanelPar 函数之前使用    

        * raise  :   无      
        '''

    def UserLvds_GetPanelFre(self,class_panel):
        '''      
        通过屏参数返回现在的刷新率

        *参数 
            * class_panel: lvds_panel_par 点屏参数配置类

        *返回   
            * 屏幕刷新频率

        * raise  :   无  
        '''

    def UserLvds_PclkGetPanelFre(self,class_panel, pclk):
        '''   
        通过屏前后沿参数与现传进去的pclk计算返回刷新率

        * 参数
            * class_panel   : lvds_panel_par 点屏参数配置类
            * pclk          : pclk 像素时钟 单位Mhz

        * 返回   : 屏幕刷新频率

        * raise  :   无  
        '''

    def UserLvds_GetPanelPclk(self,class_panel, hz):
        '''  
        通过屏前后沿参数与刷新率获取pclk

        * 参数
            * class_panel   : lvds_panel_par 点屏参数配置类
            * hz            ：屏幕刷新频率

        * 返回  
            * 像素时钟 单位Mhz

        * raise  :   无
        '''

    def UserLvds_ON(self):
        '''
        开启Lvds信号

        * 参数
            * index :  使能的板子 不传则默认为全选

        * 返回   : 看 EnumUserReturn 枚举

        * raise  :   无
        '''

    def UserLvds_OFF(self):
        '''
        关闭LvdS信号

        * 参数
        * index:  使能的板子 不传则默认为全选

        * 返回   
            * 看 EnumUserReturn 枚举

        * raise  :   无
        '''

    def UserLVDS_SetTiming(self,class_panel):
        '''
        在点亮的同时动态的修改参数

        * 参数 
            * class_panel: lvds_panel_par 点屏参数配置类

        * 返回   
            * 0--NG  
            * 1--ok

        * 注意   : 改pclk需要关闭显示才能修改

        * raise  :   无
        '''

    def LVDS_DisplayFrame(seil,len:int):
        '''
        切换页面

        * 参数   
            * len: 选择画面

        * 返回   : 无

        * raise  :   无
        '''

